package models

import (
	"github.com/shopspring/decimal"
	"gorm.io/gorm"
)

// 优惠券
type MCoupon struct {
	ID              int             `gorm:"type:int(11); primaryKey" json:"id"`
	Aid             int             `gorm:"type:int(11);" json:"aid"`                  //商户id
	Bid             int             `gorm:"type:int(11);" json:"bid"`                  //商家ID 0表示平台
	Type            int             `gorm:"type:int(11);" json:"type"`                 //1代金券
	Name            string          `gorm:"type:varchar(255);"json:"name"`             //优惠券名称
	Starttime       int             `gorm:"type:int(11);" json:"starttime"`            //开始时间
	Endtime         int             `gorm:"type:int(11);" json:"endtime"`              //结束时间
	Yxqtype         int             `gorm:"type:int(11);" json:"yxqtype"`              //有效期类型 1定时间范围 2领取后时长
	Yxqdate         int             `gorm:"type:int(11);" json:"yxqdate"`              //领取后多少天有效
	YxqstartTime    int             `gorm:"type:int(11);" json:"yxqstart_time"`        //有效期时间开始时间
	YxqendTime      int             `gorm:"type:int(11);" json:"yxqend_time"`          //有效期时间结束时间
	Money           decimal.Decimal `json:"money"`                                     //抵扣金额
	Minprice        decimal.Decimal `json:"minprice"`                                  //最低消费金额
	Stock           int             `gorm:"type:int(11);" json:"stock"`                //库存
	Perlimit        int             `gorm:"type:int(11);" json:"perlimit"`             //每人可领数量
	Usetips         string          `gorm:"type:varchar(255);"json:"usetips"`          //使用说明
	Price           decimal.Decimal `json:"price"`                                     //所需金额
	Score           int             `gorm:"type:int(11);" json:"score"`                //所需积分
	Createtime      int             `gorm:"type:int(11);" json:"createtime"`           //
	Tolist          int             `gorm:"type:int(11);" json:"tolist"`               //是否可直接领取 0:是 2:否
	Showtj          string          `gorm:"type:varchar(255);"json:"showtj"`           //显示条件 -1不限制
	Usetj           string          `gorm:"type:varchar(255);"json:"usetj"`            //使用条件 -1不限制
	Isgive          int             `gorm:"type:int(11);" json:"isgive"`               //是否可赠送 0不可赠送 1可赠送
	Gettj           string          `gorm:"type:varchar(255);"json:"gettj"`            //领取条件 -1不限制
	Fwtype          int             `gorm:"type:int(11);" json:"fwtype"`               //0全场通用,1指定类目,2指定商品,3指定服务商品
	Categoryids     string          `gorm:"type:varchar(255);"json:"categoryids"`      //指定类目ids
	Productids      string          `gorm:"type:varchar(255);"json:"productids"`       //指定商品ids
	YuyueProductids string          `gorm:"type:varchar(255);"json:"yuyue_productids"` //指定服务商品ids
	Buyproids       string          `gorm:"type:varchar(255);"json:"buyproids"`        //购买商品赠送 商品ID数据
	Buyprogive      int             `gorm:"type:int(11);" json:"buyprogive"`           //是否开启购买商品赠送
	BuyproGiveNum   string          `gorm:"type:varchar(255);"json:"buypro_give_num"`  //购买数量
	Fwscene         int             `gorm:"type:int(11);" json:"fwscene"`              //适用场景0：所有 1:买单 2：收银台
	CanusedBids     string          `gorm:"type:varchar(255);"json:"canused_bids"`     //
	Status          int             `gorm:"type:int(11);" json:"status"`               //状态
	Code            string          `json:"code"`                                      //核销码
}

func (table *MCoupon) TableName() string {
	return "m_coupon"
}

// 优惠券领取表
type MCouponRecord struct {
	ID           int     `gorm:"type:int(11); primaryKey" json:"id"`
	Aid          int     `gorm:"type:int(11);" json:"aid"` //商户id
	Bid          int     `gorm:"type:int(11);" json:"bid"` //商家ID 0表示平台
	Mid          int     `json:"mid"`                      //会员ID
	Couponid     int     `json:"couponid"`                 //优惠券ID
	Couponname   string  `json:"couponname"`               //优惠券名称
	Money        float64 `json:"money"`                    //优惠金额
	Discount     float64 `json:"discount"`                 //折扣券折扣比例
	Minprice     float64 `json:"minprice"`                 //最低消费金额
	Starttime    int     `json:"starttime"`                //开始时间
	Endtime      int     `json:"endtime"`                  //结束时间
	Usetime      int     `json:"usetime"`                  //使用时间
	Createtime   int     `json:"createtime"`               //
	Status       int     `json:"status"`                   //状态0未使用1已使用2过期
	Type         int     `json:"type"`                     //1代金券2礼品券3计次券
	LimitCount   int     `json:"limit_count"`              //计次券类型时 可用次数
	LimitPerday  int     `json:"limit_perday"`             //计次券类型时 每天可用次数
	UsedCount    int     `json:"used_count"`               //计次券时使用次数
	Code         string  `json:"code"`                     //核销码
	Hexiaoqr     string  `json:"hexiaoqr"`                 //核销码图片url
	Remark       string  `json:"remark"`                   //
	FromMid      int     `json:"from_mid"`                 //赠送人
	ReceiveTime  int     `json:"receive_time"`             //计次券时使用次数
	CanusedBids  string  `json:"canused_bids"`             //
	CanusedBcids string  `json:"canused_bcids"`            //

}

func (table *MCouponRecord) TableName() string {
	return "m_coupon_record"
}

// 使用优惠券
func AddCoupon(tx *gorm.DB, Mid int, Aid int, couponId int) int {
	//为用户增加余额和积分
	upData := map[string]interface{}{
		"status": 1,
	}
	err := tx.Model(new(MCouponRecord)).Where("aid=? AND mid=? AND id=?", Aid, Mid, couponId).Updates(&upData).Error
	if err != nil {
		return 2
	}
	return 1
}
